export default {
	/**
	 * 去除null
	 */
	cutNull(e) {
		return Object.assign({}, ...Object.keys(e).map(key => (e[key] !==
			null ? {
				[key]: e[key]
			} : {})));
	},
	/**
	 * 身份证验证码
	 */
	checkCode(val) {
		var p = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
		var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
		var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
		var code = val.substring(17);
		if (p.test(val)) {
			var sum = 0;
			for (var i = 0; i < 17; i++) {
				sum += val[i] * factor[i];
			}
			if (parity[sum % 11] == code.toUpperCase()) {
				return true;
			}
		}
		return false;
	},
	/**
	 * 身份证生日
	 */
	checkDate(val) {
		var pattern = /^(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)$/;
		if (pattern.test(val)) {
			var year = val.substring(0, 4);
			var month = val.substring(4, 6);
			var date = val.substring(6, 8);
			var date2 = new Date(year + "-" + month + "-" + date);
			if (date2 && date2.getMonth() == (parseInt(month) - 1)) {
				return true;
			}
		}
		return false;
	},
	/**
	 * 身份证地址
	 */
	checkProv(val) {
		var pattern = /^[1-9][0-9]/;
		var provs = {
			11: "北京",
			12: "天津",
			13: "河北",
			14: "山西",
			15: "内蒙古",
			21: "辽宁",
			22: "吉林",
			23: "黑龙江 ",
			31: "上海",
			32: "江苏",
			33: "浙江",
			34: "安徽",
			35: "福建",
			36: "江西",
			37: "山东",
			41: "河南",
			42: "湖北 ",
			43: "湖南",
			44: "广东",
			45: "广西",
			46: "海南",
			50: "重庆",
			51: "四川",
			52: "贵州",
			53: "云南",
			54: "西藏 ",
			61: "陕西",
			62: "甘肃",
			63: "青海",
			64: "宁夏",
			65: "新疆",
			71: "台湾",
			81: "香港",
			82: "澳门"
		};
		if (pattern.test(val)) {
			if (provs[val]) {
				return true;
			}
		}
		return false;
	},
	/**
	 * 正则身份证号码
	 */
	regular(val) {
		if (this.checkCode(val)) {
			var date = val.substring(6, 14);
			if (this.checkDate(date)) {
				if (this.checkProv(val.substring(0, 2))) {
					return true;
				}
			}
		}
		return false;
	},
	/**
	 * 正则金额
	 */
	reprice(e) {
		if (e != null && e != "" && e != "0") {
			let exp = /^(([1-9]\d*)|\d)(\.\d{1,2})?$/;
			if (exp.test(e)) {
				return true
			}
		}
		return false
	},
	/**
	 * 压缩卡号
	 */
	zipCard(e) {
		return e.slice(0, 5) + '****' + e.slice(-5, -1)
	},
	/**
	 * 检测登录
	 */
	isLogined(e) {
		try {
			let prefix = e === "trial" ? "dev" : "";
			let stamp = Date.now();
			let token = uni.getStorageSync(prefix + "token");
			let auth = uni.getStorageSync(prefix + "auth");
			let last = uni.getStorageSync(prefix + "last");
			if (token && auth && stamp - last < 10 * 3600 * 1000) {
				return true
			} else {
				uni.clearStorageSync();
				return false
			}
		} catch (e) {
			console.log('加载本地缓存==>', e);
			return false
		}
	},
	/**
	 * 匿名请求
	 */
	requestPostSync(host, data = {}) {
		return new Promise((resolve, reject) => {
			uni.request({
				url: host,
				method: "POST",
				header: {
					'content-type': 'application/json'
				},
				data: data,
				success(res) {
					if (res.data.rescode === 200) {
						resolve(res.data)
					} else {
						reject(res.data)
					}
				},
				fail(err) {
					reject({
						rescode: 999,
						resmsg: err
					})
				}
			})
		})
	},
	authenticatorGetSync(host, token, data = {}) {
		return new Promise((resolve, reject) => {
			uni.request({
				url: host,
				method: "GET",
				header: {
					'content-type': 'application/json',
					'authorization': token
				},
				data: data,
				success(res) {
					if (res.data.rescode === 401) {
						uni.$emit('logout')
						reject(res.data)
					}
					if (res.data.rescode === 200) {
						resolve(res.data)
					} else {
						reject(res.data)
					}
				},
				fail(err) {
					reject({
						rescode: 999,
						resmsg: err
					})
				}
			})
		})
	},
	authenticatorPostSync(host, token, data = {}) {
		return new Promise((resolve, reject) => {
			uni.request({
				url: host,
				method: "POST",
				header: {
					'content-type': 'application/json',
					'authorization': token
				},
				data: data,
				success(res) {
					if (res.data.rescode === 401) {
						uni.$emit('logout')
						reject(res.data)
					}
					if (res.data.rescode === 200) {
						resolve(res.data)
					} else {
						reject(res.data)
					}
				},
				fail(err) {
					reject({
						rescode: 999,
						resmsg: err
					})
				}
			})
		})
	},
	authenticatorPutSync(host, token, data = {}) {
		return new Promise((resolve, reject) => {
			uni.request({
				url: host,
				method: "PUT",
				header: {
					'content-type': 'application/json',
					'authorization': token
				},
				data: data,
				success(res) {
					if (res.data.rescode === 401) {
						uni.$emit('logout')
						reject(res.data)
					}
					if (res.data.rescode === 200) {
						resolve(res.data)
					} else {
						reject(res.data)
					}
				},
				fail(err) {
					reject({
						rescode: 999,
						resmsg: err
					})
				}
			})
		})
	},
	authenticatorPatchSync(host, token, data = {}) {
		return new Promise((resolve, reject) => {
			uni.request({
				url: host,
				method: "PATCH",
				header: {
					'content-type': 'application/json',
					'authorization': token
				},
				data: data,
				success(res) {
					if (res.data.rescode === 401) {
						uni.$emit('logout')
						reject(res.data)
					}
					if (res.data.rescode === 200) {
						resolve(res.data)
					} else {
						reject(res.data)
					}
				},
				fail(err) {
					reject({
						rescode: 999,
						resmsg: err
					})
				}
			})
		})
	},
	authenticatorDeleteSync(host, token) {
		return new Promise((resolve, reject) => {
			uni.request({
				url: host,
				method: "DELETE",
				header: {
					'content-type': 'application/json',
					'authorization': token
				},
				success(res) {
					if (res.data.rescode === 401) {
						uni.$emit('logout')
						reject(res.data)
					}
					if (res.data.rescode === 200) {
						resolve(res.data)
					} else {
						reject(res.data)
					}
				},
				fail(err) {
					reject({
						rescode: 999,
						resmsg: err
					})
				}
			})
		})
	},
}